package com.soo.hoo.admin.service;

import cn.hutool.core.lang.tree.Tree;
import com.soo.hoo.admin.model.dto.RoleDTO;
import com.soo.hoo.admin.model.entity.SysPermission;
import com.soo.hoo.core.model.MatchItem;
import com.soo.hoo.core.service.IService;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * <p>权限管理接口</p>
 *
 * @author 杨燚
 * @since 2023/4/3
 */
public interface PermissionService extends IService<SysPermission> {

    /**
     * 获取权限的树形结构
     *
     * @return 树形结构
     */
    List<Tree<Long>> getPermissionTree();

    /**
     * 获取全列列表树形结构
     *
     * @param matchItems 匹配项
     * @return 菜单权限树形结构
     */
    List<Tree<Long>> tree(List<MatchItem> matchItems);

    /**
     * 通过id删除包括自身以及其子类的权限
     *
     * @param id 需要删除的权限id
     */
    void removeChildren(Long id);

    /**
     * 初始化角色权限
     */
    void initPermission();

    /**
     * 校验权限是否已存在。
     * 同一个目录下不能存在相同的两个权限名称
     *
     * @param parentId       父节点id
     * @param permissionName 权限名称
     */
    void verifyPermission(Long parentId, String permissionName);


    /**
     * 获取角色下菜单，多个菜单使用顿号分割
     *
     * @param roleIds 角色id
     * @return 角色信息
     */
    Map<Long, RoleDTO> mapRolePermission(Collection<Long> roleIds);
}
